#include <bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	istringstream iss{string{istreambuf_iterator<char>{cin},
							 istreambuf_iterator<char>{}}}; // 一次将输入全部读入输入缓冲区
	ostringstream oss;										// 将输出放入输出缓冲区
	int t = 1;												// t个case
	// iss >> t;
	while (t--)
	{
		int n;
		iss >> n;
		if (n == 1)
		{
			cout << 1 << endl;
			return 0;
		}
		vector<int> nums(n);
		for (int i = 0; i < n; i++)
		{
			iss >> nums[i];
		}

		// 数组有序直接返回结果
		bool flag = true;
		for (int i = 0; i + 1 < n; i++)
		{
			if (nums[i] > nums[i + 1])
			{
				flag = false;
				break;
			}
		}
		if (flag)
		{
			cout << n * (n + 1) / 2 << endl;
			return 0;
		}

		vector<int> prefix(n, 1), suffix(n, 1);
		for (int i = 1; i < n; i++)
		{
			if (nums[i - 1] <= nums[i])
			{
				prefix[i] = prefix[i - 1] + 1;
			}
		}
		for (int i = n - 2; i - 2 >= 0; i--)
		{
			if (nums[i] <= nums[i + 1])
			{
				suffix[i] = suffix[i + 1] + 1;
			}
		}

		int cnt = 0;
		for (int i = 0; i < n; i++)
		{
			if (i > 0 && prefix[i - 1] != i)
			{
				break;
			}
			int l = i, r = n - 1;
			while (l < r)
			{
				int m = (l + r) / 2;
				if (suffix[m + 1] == n - m - 1 && (i == 0 || nums[i - 1] <= nums[m + 1]))
				{
					r = m;
				}
				else
				{
					l = m + 1;
				}
			}
			cnt += (n - l);
		}
		oss << cnt << endl; // 放入输出缓冲区oss
	}

	cout << oss.str(); // 将输出缓冲区一次全部输出

	return 0;
}
// 64 位输出请用 printf("%lld")